<?php

namespace App\Models;

use App\Observers\GoodsObserver;
use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;

class Goods extends Model
{
    //在你想要做搜索的模型中添加 Laravel\Scout\Searchable trait.就会注册一个模型观察者来保持模型和搜索驱动的同步.
    use  Searchable;
    protected $fillable = [
        'title', 'price', 'pics', 'description', 'contant', 'category_id', 'is_commend'
    ];
    //设置自动转换
    protected $casts = [
        'category_id' => 'array',
        'pics' => 'array'
    ];

//    Goods商品和收藏多态表之间模型关联关系
        public function collect(){
            return $this->morphMany(Collect::class,'collect');
        }


    //给当前Goods模型设置了一个模型观察器,当删除goods表中的数据的时候相应也要把product货品表中的数据删除
    //需要在模型中注册这个观察器
//    protected static function boot(){
//        Goods::observe(GoodsObserver::class);
//        parent::boot();
//    }





//    商品(goods)表和货品(product)表是一对多的关系,可以在商品模型中写一个相应的模型关联方法
    function product(){
        return $this->hasMany(Product::class,'goods_id','id');
    }
    //写一个获取商品所属分类的模型关联方法
    function getCategory(){
      $category =  array_map(function ($v){
            return Category::find($v)->title;
        },$this['category_id']);
       return implode('->',$category);
    }
    // 获取商品信息及对应的货品信息
    function getInfo(){
        //先获取当前商品的商品信息
        $info = $this->toArray();
        $info['category_id'] = $this->changeCategoryId();
        //然后通过模型关联的方法获取当前商品对应的货品信息
        $info['products']= $this->product;
        return $info;
    }
    //这个方法能将goods中category_id字段换成相应的category对象
    function changeCategoryId(){
        return array_map(function ($value){
           return Category::find($value);
        },$this->category_id);
    }
}
